#include"blockqueue.hpp"
#include<pthread.h>
#include<unistd.h>

using namespace BlockQueueModele;


void* Consumer(void* args)
{
	BlockQueue<int> *bq = static_cast<BlockQueue<int>*>(args);

	int data = 0;
	while(1)
	{
		//sleep(2);

		// 1. 从bq拿到数据
		bq->Pop(&data);

		// 2. 做处理
		std::cout << "Consumer 消费了一个数据:" << data << std::endl;
		//sleep(1);
	}
}

void* Productor(void* args)
{
	BlockQueue<int> *bq = static_cast<BlockQueue<int>*>(args);

	int data = 10;
	while(1)
	{
		sleep(2);
		// 1.从外部获取数据
		

		// 2.生产到bq中
		bq->Equeue(data);

		std::cout << "productor 生产了一个数据:" << data << std::endl;
		data++;
	}
}


int main()
{
	BlockQueue<int>* bq = new BlockQueue<int>(5);


	// 单生产 单消费
	pthread_t c1,c2,p1,p2,p3;
	pthread_create(&c1,nullptr,Consumer,bq);
	pthread_create(&c2,nullptr,Consumer,bq);
	pthread_create(&p1,nullptr,Productor,bq); 
	pthread_create(&p2,nullptr,Productor,bq); 
	pthread_create(&p3,nullptr,Productor,bq); 


	pthread_join(c1,nullptr);
	pthread_join(c2,nullptr);
	pthread_join(p1,nullptr);
	pthread_join(p2,nullptr);
	pthread_join(p3,nullptr);
}

